import Koa from 'koa'
import path from 'path'
import Router from 'koa-router'
import body from 'koa-body'
import cors from 'koa2-cors'
import koaStatic from 'koa-static'
import websockify from 'koa-websocket'
import route from 'koa-route'

import AppRoutes from './routes'

const PORT = 3300

const app = websockify(new Koa())

app.ws.use(function (ctx, next) {
  ctx.websocket.send('connection succeeded!')
  return next(ctx)
})

app.ws.use(
  route.all('/test', function (ctx) {
    // ctx.websocket.send('Hello World');
    ctx.websocket.on('message', function (message) {
      // do something with the message from client

      if (message !== 'ping') {
        const data = JSON.stringify({
          id: Math.ceil(Math.random() * 1000),
          time: new Date().getTime(),
          res: `${message}`,
        })
        ctx.websocket.send(data)
      }
      console.log(message)
    })
  }),
)

const router = new Router()

// router
AppRoutes.forEach((route) => router[route.method](route.path, route.action))

app.use(cors())
app.use(
  body({
    encoding: 'gzip',
    multipart: true,
    formidable: {
      // uploadDir: path.join(__dirname, '/upload/'), // 设置文件上传目录
      keepExtensions: true,
      maxFieldsSize: 20 * 1024 * 1024,
    },
  }),
)
app.use(router.routes())
app.use(router.allowedMethods())
app.use(koaStatic(path.join(__dirname)))

app.listen(PORT, () => {
  console.log(`Application started successfully: http://localhost:${PORT}`)
})
